package Bridge;
//桥接模式：
//四部分：
//应用场景：
//1、当一个类存在两个独立变化的维度，且这两个维度都需要进行扩展时。
//2、当一个系统不希望使用继承或因为多层次继承导致系统类的个数急剧增加时。
//3、当一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性时。
/**
 * 抽象化角色：使用实现类
 * 拓展抽象化类：完成抽象化功能
 * 实现：抽象实现接口
 * 具体实现：完成实现接口
 */
public class BridgeTest {
    public static void main(String[] args) {
        Implementor imple = new ConcreteImplementorA();
        Abstraction abs = new RefinedAbstraction(imple);
        abs.Operation();
    }
}
//实现化角色
interface Implementor{
    public void OperationImpl();
}
//具体实现化角色
class ConcreteImplementorA implements Implementor{

    @Override
    public void OperationImpl() {
        System.out.println("具体实现concrete类被访问");
    }
}
//抽象化角色
abstract class Abstraction{
    protected Implementor imple;
    protected Abstraction(Implementor imple){
        this.imple = imple;
    }
    //操作方法
    public abstract void Operation();
}
//拓展抽象化角色
class RefinedAbstraction extends Abstraction{
    protected RefinedAbstraction(Implementor imple){
        super(imple);
    }
    @Override
    public void Operation() {
        System.out.println("拓展抽象化(RefinedAbstraction)角色被访问");
        imple.OperationImpl();
    }
}